package ejemplo.componentes.interfaces;

import ejemplo.util.Vector2D;

/**
 * Interfaz que representa el comportamiento de un objeto Movil.
 * @author Miguel Vicente
 */
public interface IMovil {
	
	/**
	 * Identificador de la interfaz.
	 */
	public static final String ID_INTERFAZ = "movil";
	/**
	 * Mueve el objeto en el eje X.
	 * @param delta
	 */
	public void moverX(double delta);
	/**
	 * Mueve el objeto en el eje Y.
	 * @param delta
	 */
	public void moverY(double delta);
	/**
	 * Mueve el objeto.
	 * @param delta
	 */
	public void mover(double delta);
	/**
	 * Devuelve la posicion en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverX(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return posicion en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverX(double dt)</code>
	 */
	public double calcularNuevaPosX(double delta);
	/**
	 * Devuelve la posicion en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverY(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return posicion en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverY(double dt)</code>
	 */
	public double calcularNuevaPosY(double delta);
	/**
	 * Devuelve la posicion a la que se moveria el objeto si se llamara al metodo
	 * <code>mover(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return posicion a la que se moveria el objeto si se llamara al metodo
	 * <code>mover(double dt)</code>
	 */
	public Vector2D calcularNuevaPos(double delta);
	/**
	 * Devuelve la velocidad en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverX(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return velocidad en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverX(double dt)</code>
	 */
	public double calcularNuevaVelX(double delta);
	/**
	 * Devuelve la velocidad en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverY(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return velocidad en el eje X a la que se moveria el objeto si se llamara al metodo
	 * <code>moverY(double dt)</code>
	 */
	public double calcularNuevaVelY(double delta);
	/**
	 * Devuelve la velocidad a la que se moveria el objeto si se llamara al metodo
	 * <code>mover(double dt)</code>, pero no lo mueve.
	 * @param delta
	 * @return velocidad a la que se moveria el objeto si se llamara al metodo
	 * <code>mover(double dt)</code>
	 */
	public Vector2D calcularNuevaVel(double delta);
	/**
	 * Bloquea el objeto IMovil, impidiendo su movimiento.
	 */
	public void bloquear();
	/**
	 * Desbloquea el objeto iMovil, permitiendo su movimiento.
	 */
	public void desbloquear();
	/**
	 * Devuelve true si el objeto esta bloqueado, false en caso contrario.
	 * @return boolean
	 */
	public boolean isBloqueado();
}
